package com.qiongqi.datadir.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigInteger;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Date;

/**
 * CA返回的正式证书是一个完整X.509结构，包含以下全部字段：
 *
 * 字段              |            内容说明          
 *
 * 版本号            |       证书格式版本（如v3）
 * 序列号            |       CA分配的唯一标识符 
 * 签名算法          |       CA签名使用的算法（如SHA256-RSA）
 * 颁发者（Issuer）  |       CA的身份信息（DN）
 * 有效期            |       起止时间（notBefore/notAfter）
 * 主题（Subject）   |       企业的身份信息（来自CSR）
 * 公钥信息          |       企业提交的公钥及算法 
 * 扩展字段          |       增强信息（如密钥用途keyUsage、主题备用名称SAN）
 * CA数字签名        |       对证书主体的哈希值加密结果，用于验证证书真实性 
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Certificate extends BaseDomain{
    // 企业创建密钥对（KeyPair）后，发送给CA之前产生的字段
    private String subject;      // 证书主题（DN）
    private String keyAlgorithm; // 密钥算法（RSA/ECC等）
    // CA签名后返回给企业的字段
    private String issuer;       // 颁发者（DN）
    private BigInteger serialNumber; // 序列号
    private Date notBefore;      // 有效期起始
    private Date notAfter;       // 有效期截止
    private String signatureAlgorithm; // 签名算法
    private String signature; // 数字签名
    private String publicKey; // 公钥对象
    private String privateKey; // 私钥对象
    private String ver; //凭证版本
}
